package net.netty.buf;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.stream.IntStream;

/**
 * Netty的数据容器
 * <p>
 * * 1. 可以被扩展
 * * 2. 通过内置的复合缓冲区类型实现了透明的零拷贝
 * * 3. 容量可以按需增长
 * * 4. 读写模式切换不需要调用flip方法
 * * 5. 读写使用不用的索引
 * * 6. 方法支持链式调用
 * * 7. 支持引用计数
 * * 8. 支持池化
 *
 * @author 王霄
 * @date 2021/9/29 10:46
 **/
public class ByteBufDemo {
    public static void main(String[] args) {
        //创建一个ByteBuf,长度为10的字节数组
        ByteBuf buf = Unpooled.buffer(10);
        //写入数据
        IntStream.rangeClosed(1, 10).forEach(buf::writeByte);
        //获取数据
        IntStream.range(0, buf.capacity())
                .forEach(i -> System.out.println(buf.getByte(i)));

        ByteBuf byteBuf = Unpooled.copiedBuffer("hello,world", StandardCharsets.UTF_8);
        if (byteBuf.hasArray()) {
            byte[] array = byteBuf.array();
            System.out.println(Arrays.toString(array));
            System.out.println(new String(array));
        }
    }
}
